package com.whfc.ms.api.emp.service;

import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.emp.dto.*;
import com.whfc.emp.param.*;
import com.whfc.entity.dto.msg.AppWarnMsgRecDTO;
import com.whfc.fuum.entity.SysUser;

import java.util.Date;

/**
 * @ClasssName MsAppEmpWarnService
 * @Description 人员报警设置
 * @Author hw
 * @Date 2021/1/5 11:36
 * @Version 1.0
 */
public interface MsAppEmpWarnService {

    /**
     * 人员报警规则列表
     *
     * @param deptId
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @param ruleType
     * @param enableFlag
     * @param warnType
     * @return
     */
    PageData<AppWarnRuleDTO> settingList(Integer deptId, Integer pageNum, Integer pageSize, String keyword, Integer ruleType, Integer enableFlag, Integer warnType);


    /**
     * 人员报警设置报警时间
     *
     * @param request
     */
    void setTime(AppWarnSetTimeParam request);

    /**
     * 人员报警信息接收人及接收方式
     *
     * @param ruleId
     * @return
     */
    AppWarnMsgRecDTO userList(Integer ruleId);

    /**
     * 人员报警设置报警接收人
     *
     * @param request
     */
    void setUser(AppWarnEmpSetUserParam request);

    /**
     * 人员报警记录列表
     *
     * @param deptId
     * @param pageNum
     * @param pageSize
     * @param state
     * @param ruleType
     * @param startTime
     * @param endTime
     * @return
     */
    PageData<AppWarnEmpRecordDTO> recordList(Integer deptId, Integer pageNum, Integer pageSize, Integer state, Integer ruleType, Date startTime, Date endTime);

    /**
     * 人员报警详情
     *
     * @param warnId
     * @return
     */
    AppWarnEmpRecordDetailDTO recordDetail(Integer warnId);

    /**
     * 处理人员报警
     *
     * @param user
     * @param request
     */
    void handle(SysUser user, AppWarnHandleParam request);

    /**
     * 批量处理人员报警
     *
     * @param param
     */
    void batchHandle(WarnBatchHandleParam param);

    /**
     * 批量删除人员报警记录
     *
     * @param param
     */
    void del(WarnBatchDelParam param);

    /**
     * 查询时间内报警数
     *
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getWarnNum(Integer deptId, Date startTime, Date endTime);

    /**
     * 人员报警数量
     *
     * @param deptId
     * @param state
     * @param startTime
     * @param endTime
     * @return
     */
    AppWarnEmpRecordNumDTO num(Integer deptId, Integer state, Date startTime, Date endTime);

    /**
     * 启用/禁用人员报警规则
     *
     * @param request
     */
    void enable(AppEmpWarnEnableParam request);

    /**
     * 添加人员报警规则
     *
     * @param param
     */
    void settingAdd(AppEmpWarnAddParam param);

    /**
     * 编辑人员报警规则
     *
     * @param param
     */
    void settingEdit(AppEmpWarnEditParam param);

    /**
     * 删除人员报警规则
     *
     * @param ruleId
     */
    void settingDel(Integer ruleId);

    /**
     * 查询已有的报警人员
     *
     * @param ruleId
     * @param empName
     * @return
     */
    ListData<AppEmpDTO> objectList(Integer ruleId, String empName);

    /**
     * 查询可供选择的报警人员
     *
     * @param ruleId
     * @param empName
     * @return
     */
    ListData<AppEmpDTO> getAllObject(Integer ruleId, String empName);

    /**
     * 添加报警人员
     *
     * @param param
     */
    void objectAdd(EmpWarnObjectAddParam param);

    boolean sendAlarmMessageToWorkPlanGuardians();
}
